package com.sztx.pay.center.rpc.api.service;

import com.sztx.pay.center.rpc.api.domain.B2CRequest;
import com.sztx.pay.center.rpc.api.domain.B2CWithPwdRequest;
import com.sztx.pay.center.rpc.api.domain.ChargeRequest;
import com.sztx.pay.center.rpc.api.domain.ConfirmOrder;
import com.sztx.pay.center.rpc.api.domain.RefundRequest;
import com.sztx.pay.center.rpc.api.domain.ResendQuickVCRequest;
import com.sztx.pay.center.rpc.api.domain.TradeResponse;
import com.sztx.pay.center.rpc.api.domain.TransferRequest;
import com.sztx.pay.center.rpc.api.domain.VerifyQuickPayRequest;
import com.sztx.pay.center.rpc.api.domain.WithdrawRequest;

public interface TradeRpcService {
	
	/**
	 * B2C交易
	 * 
	 * <p>网银支付
	 * <br>快捷支付
	 * <br>余额支付
	 * <br>微信支付（app,公众号，扫码）
	 * <br>支付宝支付（app,扫码，wap）
	 * @param request
	 * @return
	 * @author xiaosc
	 * @date 2016-1-11 下午9:16:17 
	 * @see [类、类#方法、类#成员]
	 */
	TradeResponse b2c(B2CRequest request);
	
	/**
	 * 密码支付b2c
	 * @param request
	 * @return
	 */
	TradeResponse b2cwithpwd(B2CWithPwdRequest request);
	
	
	/**
	 * 充值
	 * <p>仅支持快捷支付充值余额
	 * @param request
	 * @return
	 * @author xiaosc
	 * @date 2016-1-11 下午9:19:11 
	 * @see [类、类#方法、类#成员]
	 */
	TradeResponse charge(ChargeRequest request);

	/**
	 * 提现
	 * <p>提现分为用户余额提现和返利金提现
	 * <br>余额提现规则：只能提现到用户绑定的提现卡中
	 * <br>返利金提现规则：可提现到用户绑定的提现卡中、用户绑定的支付宝账号及用户的余额中
	 * <br>注：商户返利金退返即将商户的返利金提现到同一个商户的现金账户
	 * 
	 * @param request
	 * @return
	 * @author xiaosc
	 * @date 2016-1-11 下午9:23:25 
	 * @see [类、类#方法、类#成员]
	 */
	TradeResponse withdraw(WithdrawRequest request);
	
	
	/**
	 * 转账
	 * <p>转账分为四种 ：1、余额->余额，2、余额->银行卡，3、银行卡->余额，4、银行卡->银行卡
	 * <br>银行卡->余额和银行卡->银行卡这两种情况的转出方所使用的银行卡必须为用户所绑定的快捷支付银行卡
	 * <br>银行卡->余额如果转入方和转出方相同则为充值
	 * 
	 * @param request
	 * @return
	 * @author xiaosc
	 * @date 2016-1-11 下午9:30:56 
	 * @see [类、类#方法、类#成员]
	 */
	TradeResponse transfer(TransferRequest request);
	
	/**
	 * 确认收货
	 * 
	 * <p>B2C担保交易才有此接口
	 * @param request
	 * @return
	 * @author xiaosc
	 * @date 2016-1-11 下午9:43:05 
	 * @see [类、类#方法、类#成员]
	 */
	TradeResponse confirmOrder(ConfirmOrder request);
	
	
	/**
	 * 退款
	 * 
	 * <p>只有B2C担保交易才有此接口，且只能在确认收货前使用该接口
	 * @param request
	 * @return
	 * @author xiaosc
	 * @date 2016-1-11 下午9:46:15 
	 * @see [类、类#方法、类#成员]
	 */
	TradeResponse refund(RefundRequest request);
	
	/**
	 * 确认快捷支付
	 * 
	 * @param tradeOrderId
	 * @param verifyCode
	 * @return
	 * @author xiaosc
	 * @date 2016年2月26日 下午6:03:42 
	 * @see [类、类#方法、类#成员]
	 */
	TradeResponse verifyQuickPay(VerifyQuickPayRequest request);


	/**
	 * 
	 * 重新发送快捷支付绑卡短信
	 * 
	 * @param tradeOrderId
	 * @return
	 */
	TradeResponse resendQuickVC(ResendQuickVCRequest request);

}
